package top.kaoshanji.p1ch02c;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import java.lang.invoke.MethodType;

/**
 * 代码清单 p1ch02c-01：MethodType#methodType的使用示例
 * author kaoshanji
 * ^_^
 * create time 2025/1/2 16:31
 */
public class MethodTypeExample01 {

    private static final Logger logger = LogManager.getLogger(MethodTypeExample01.class);

    public static void main(String[] args) {
        logger.info("...代码清单 p1ch02c-01：MethodType#methodType的使用示例...");

        // 第一个参数是返回类型，后面是参数(有0个或多个)

        MethodType mt1 = MethodType.methodType(int.class); // 如 String.length()
        MethodType mt2 = MethodType.methodType(String.class, String.class); // 如 String.concat(String str)

        // 如 String.getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)
        MethodType mt3 = MethodType.methodType(void.class, int.class, int.class, char[].class, int.class);

        MethodType mt4 = MethodType.methodType(boolean.class, mt2); // 如 String.startsWith(String prefix)

        System.out.println(mt1);
        System.out.println(mt2);
        System.out.println(mt3);
        System.out.println(mt4);

    }

}
